Simply replace the old qsort() call with a timsort() call.
This is ultimately relevant because timsort is a LOT faster in merging
to already sorted lists (think items-chaged adding some items) or
reversing an existing list (think columnview sort order changes).
Benchmarks:
initially sorting the model
qsort timsort
128,000 items 124ms 111ms
256,000 items 264ms 250ms
#include "gtkintl.h"
#include "gtkprivate.h"
+#include "gtktimsortprivate.h"
typedef struct _SortItem SortItem;
struct _SortItem
static void
gtk_sort_list_model_resort (GtkSortListModel *self)
{
- g_qsort_with_data (sort_array_get_data (&self->items),
- sort_array_get_size (&self->items),
- sizeof (SortItem),
- sort_func,
- self->sorter);
+ gtk_tim_sort (sort_array_get_data (&self->items),
+ sort_array_get_size (&self->items),
+ sizeof (SortItem),
+ sort_func,
+ self->sorter);
}
static void